package com.fabriciojf.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * classe para manipulacao de arquivos texto
 *
 * @author fabricio
 * @since 18/03/2010
 * @version 1.1 19/04/2010
 */
public class TextFileCS {

    private File arquivo;
    private List<String> conteudo;

    /**
     * constructor instancia o arquivo e a lista
     * @param arquivoTexto
     */
    public TextFileCS(String arquivoTexto) {
        // pega o nome do arquivo texto e instancia o objeto file
        conteudo = new ArrayList<String>();
        arquivo = new File(arquivoTexto);
    }

    /**
     * adiciona conteudo no arquivo texto
     * @param text
     */
    public void addText(String text) {
        // adiciona o texto ao objeto em memoria
        if (!text.equals("")) {
            conteudo.add(text);
        }
    }

    /**
     * adiciona o conteudo no arquivo e salva
     */
    public boolean save() {

        FileWriter fw;

        // descobre qual o caracter responsavel por quebra de linha
        // no sistema corrente
        String enter = System.getProperty("line.separator");
        try {
            fw = new FileWriter(arquivo, true);

            for (int i = 0; i < conteudo.size(); i++) {
                fw.write(conteudo.get(i) + enter);
            }

            fw.close();
        } catch (IOException ex) {
            Logger.getLogger(TextFileCS.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }

        conteudo.clear();
        return true;
    }

    /**
     * Apaga todo o conteudo do arquivo
     */
    public void cleanFile() {
        arquivo.delete();
    }

    /**
     * Retorna conteudo do arquivo log
     */
    public String getText() {

        String text = "";
        if (arquivo.exists()) {
            String line;

            FileInputStream stream = null;
            InputStreamReader streamReader = null;
            BufferedReader reader = null;

            try {
                stream = new FileInputStream(arquivo.getPath());
                streamReader = new InputStreamReader(stream);
                reader = new BufferedReader(streamReader);

                // Neste while lemos o arquivo linha a linha
                while ((line = reader.readLine()) != null) {
                    text += line.concat("\n");
                }

                reader.close();
                streamReader.close();
                stream.close();

            } catch (FileNotFoundException ex) {
                Logger.getLogger(TextFileCS.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(TextFileCS.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        return text;
    }

}
